package delphorm.web.validateur;

import org.springframework.validation.Errors;
import org.springframework.validation.Validator;

import delphorm.web.forms.ReponseFormulaire;



public class AjouterReponseSessionValidateur implements Validator {

	public boolean supports(Class classe) {
		
		return classe.isAssignableFrom(ReponseFormulaire.class);
	}

	public void validate(Object obj, Errors errors) {
		ReponseFormulaire reponseCourante = (ReponseFormulaire) obj;
//		verification du type de donnée
		if(reponseCourante.getTypeDeDonnee() == null ||reponseCourante.getTypeDeDonnee().trim().equals(""))
		{
			errors.rejectValue("typeDeDonnee","ajouterReponse.typeDeDonnee.necessaire");
		}
		else if(!reponseCourante.getTypeDeDonnee().equals("texte") && !reponseCourante.getTypeDeDonnee().equals("numerique") && !reponseCourante.getTypeDeDonnee().equals("fichier"))
		{
			errors.rejectValue("typeDeDonnee","ajouterReponse.typeDeDonnee.mauvais");
		}
		
		
		//vérification de la cohérence du formulaire
		if(reponseCourante.getOuverte().booleanValue()) //si la réponse est ouverte
		{
			//pas besoin de valeur texte
			if(reponseCourante.getValeurTexte() != null && ! reponseCourante.getValeurTexte().trim().equals(""))
			{
				errors.rejectValue("valeurTexte","ajouterReponse.incoherent.reponseouverte.pasbesoinvaleurtexte");
			}
			//pas besoin de valeur numerique
			if(reponseCourante.getValeurNumerique() != null)
			{
				errors.rejectValue("valeurNumerique","ajouterReponse.incoherent.reponseouverte.pasbesoinvaleurnumerique");
			}
//			pas besoin de valeur fichier
			if(reponseCourante.getNomFichier() != null && ! reponseCourante.getNomFichier().trim().equals(""))
			{
				errors.rejectValue("nomFichier","ajouterReponse.incoherent.reponseouverte.pasbesoinnomfichier");
			}
			if(!( reponseCourante.getFichier().length == 0 ||  reponseCourante.getFichier() == null))
			{
				errors.rejectValue("nomFichier","ajouterReponse.incoherent.reponseouverte.pasbesoinfichier");
			}
		}
		else
		{
			//verifie que la bonne valeur texte est saisie
			if(reponseCourante.getTypeDeDonnee().equals("texte"))
			{
				if(reponseCourante.getValeurTexte().trim().equals("") ||  reponseCourante.getValeurTexte() == null)
				{
					errors.rejectValue("valeurTexte","ajouterReponse.incoherent.reponsefermee.valeurtexteobligatoire");
				}
				if(reponseCourante.getValeurNumerique() != null)
				{
					errors.rejectValue("valeurNumerique","ajouterReponse.incoherent.reponsefermee.pasbesoinvaleurnumerique");
				}
				if(! (reponseCourante.getNomFichier() == null || reponseCourante.getNomFichier().trim().equals("") ))
				{
					errors.rejectValue("nomFichier","ajouterReponse.incoherent.reponsefermee.pasbesoinnomfichier");
				}
				if(!( reponseCourante.getFichier().length == 0 ||  reponseCourante.getFichier() == null))
				{
					errors.rejectValue("nomFichier","ajouterReponse.incoherent.reponsefermee.pasbesoinfichier");
				}	
			}
			//verifie que la bonne valeur numérique est saisie
			else if(reponseCourante.getTypeDeDonnee().equals("numerique"))
			{
				if(reponseCourante.getValeurNumerique() == null)
				{
					errors.rejectValue("valeurNumerique","ajouterReponse.incoherent.reponsefermee.valeurnumeriqueobligatoire");
				}
				if( reponseCourante.getValeurTexte() != null && !reponseCourante.getValeurTexte().trim().equals("") )
				{
					errors.rejectValue("valeurTexte","ajouterReponse.incoherent.reponsefermee.pasbesoinvaleurtexte");
				}
				if(! (reponseCourante.getNomFichier() == null || reponseCourante.getNomFichier().trim().equals("") ))
				{
					errors.rejectValue("nomFichier","ajouterReponse.incoherent.reponsefermee.pasbesoinnomfichier");
				}
				if(!( reponseCourante.getFichier().length == 0 ||  reponseCourante.getFichier() == null))
				{
					errors.rejectValue("nomFichier","ajouterReponse.incoherent.reponsefermee.pasbesoinfichier");
				}
			}
			//verifie les champs fichier
			else if(reponseCourante.getTypeDeDonnee().equals("fichier"))
			{
				if( reponseCourante.getNomFichier() == null || reponseCourante.getNomFichier().trim().equals("") )
				{
					errors.rejectValue("nomFichier","ajouterReponse.reponsefermee.nomfichier.obligatoire");
				}
				if( reponseCourante.getFichier().length == 0 ||  reponseCourante.getFichier() == null)
				{
					errors.rejectValue("fichier","ajouterReponse.reponsefermee.fichier.obligatoire");
				}
				if( reponseCourante.getValeurTexte() != null && !reponseCourante.getValeurTexte().trim().equals("") )
				{
					errors.rejectValue("valeurTexte","ajouterReponse.incoherent.reponsefermee.pasbesoinvaleurtexte");
				}
				if(reponseCourante.getValeurNumerique() != null)
				{
					errors.rejectValue("valeurNumerique","ajouterReponse.incoherent.reponsefermee.pasbesoinvaleurnumerique");
				}	
			}
			//TODO else exception
			
			//verifie que l'inititule n'est pas rempli (reserve aux réponses ouvertes)
			if(reponseCourante.getIntitule() != null && !reponseCourante.getIntitule().trim().equals("")  )
			{
				errors.rejectValue("intitule","ajouterReponse.incoherent.reponsefermee.pasbesoinintitule");
			}
		}
		
	}

}
